package org.example06.ba04;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;

import java.util.Date;


/**
 * @Aspect：是aspectJ中的注解。
 *      作用：表示当前类是切面类。
 *      切面类：是用来给业务方法增肌功能的类。在这个类中有切面的功能代码。
 *      位置：在类定义的上面
 */
@Aspect
public class MyAspect {
    /**
     * 异常方法的定义格式
     * 1。 public
     * 2. 没有返回值
     * 3. 方法名自定义
     * 4. 方法可以没有参数
     */

    /**
     * @AfterThrowing;异常通知
     *      属性：1.value 切入点表达式
     *           2.throwing 自定义的变量，表示目标抛出的异常对象。
     *           变量名必须和方法参数名一样。
     *
     *       特点：
     *          1.在目标方法抛出异常时执行
     *          2. 可以做异常的监控程序，监控目标方法执行时是不是又异常
     *              如果有异常，可以做自定义处理
     * @param ex
     */

    @AfterThrowing(value = "execution(* *..SomeServiceImpl.doSecond(..))", throwing = "ex")
    public void myAfterThrowing(Exception ex){
        System.out.println("异常通知，执行："+ex.getMessage());
    }
}
